#!/bin/bash
-- 定义变量rq 定义为昨天 格式为YYYY-MM-DD
rq=$(date -d '1 days age' +'%YYYY-%MM-%DD')
-- 定义变量log_dir 指定日志文件的存储目录
log_dir = "/root/hive_date"
-- 打印日期
echo "日期为：$rq"

-- 定义函数脚本执行函数 execute_hive_script
execute_hive_script(){
    -- $1:hive脚本文件名
    local script_name=$1
    -- $2:日志文件名
    local log_name=$2
    -- $3:任务名称
    local task_name=$3

    echo "开始执行：${task_name}"
    -- 执行hive脚本命令
    -- nohup确保后台持续运行
    -- 调用hive客户端，按etl_date=前一天过滤数据
    -- 结合$1参数指定hive脚本路径
    -- 结合$2将标准输出和错误输出重定向到指定的日志文件中
    nohup hive --hivevar etl_date="$rq" -f "/root/hive_data/${script_name}" > "${log_dir}/${log_name}" 2>&1

    -- 获取hive脚本的退出码：0代表成功，非0代表失败
    local exit_code=$?

    if(( exit_cod == o ))
    then
        echo "${task_name}执行结束"
        return 0
    else
        echo "${task_name}执行异常，请检查日志文件${log_dir}/${log_name}"
        return 1
    fi
}

-- 调用execute_hive_script函数，执行脚本，执行失败的话，退出脚本，不再执行后续任务
execute_hive_script "fxq_ods_to_dwd_byDay.sql" "fxq_ods_to_dwd.log" "反洗钱ODS->DWD数据增量抽取脚本" || exit 1
execute_hive_script "fxq_dwd_to_dws_byDay.sql" "fxq_dwd_to_dws.log" "反洗钱DWD->DWS数据怎两抽取脚本" || exit 1
execute_hive_script "fxq_dws_to_ads_byDay.sql" "fxq_dws_to_ads.log" "反洗钱DWS->ADS数据怎两出去脚本" || exit 1
echo "所有反洗钱数据增量脚本执行完成"

-- hive orc格式，sqoop hdfs格式
-- 数据导出，orc格式转变问txt文本格式
echo "将orc格式转变为文本格式"
echo "创建临时表"

-- 将命令进行后台执行（终端关闭也不会终端）
-- 指点创建临时表的脚本路径并重定向到日志文件createTmp.txt中
nohup hive -f /root/hive_data/ADS临时表.sql > "${log_dir}/createTmp.txt" 2>&1 &
-- 上一个后台hive命令的进程ID
hive_pid=$!
-- 等待后台hive命令执行完成，并获取其退出码
wait $hive_pi
-- 获取创建临时表的退出码
local exit_code=$?

if(( exit_code == 0 ))
    then
        echo "临时表创建成功"
    else
        echo "临时表创建异常，请检查日志文件${log_dir}/createTmp.txt"
    exit 1
fi

echo "开始导入数据"
-- 通过read -p 交互活取用户的Oracle服务器的ip地址,用户名，密码
-- 并分别保存到变量ora_ip，ora_username,ora_password中
read -p "请输入你的Oracle地址" ora_ip
read -p "请输入你的oracle用户名" ora_username
read -p "请输入你的Oracle密码" ora_password

-- 定义sqoop导出函数 execute_sqoop_export
execute_sqoop_export (){
    -- 定义目标表名
    local table_name=$1
    -- 定义hdfs数据源卡用户改变
    local hdfs_path=$2
    -- 定义任务名称
    local task_name=$3

    echo "开始导入${task_name}"

    sqoop import \
    --connect jdbc:oracle:thin:@"$orc_ip":1521:orcl \
    --username "$orc_username" \
    --password "$orc_password" \
    --table "$table_name" \
    --export-dir "$hdfs_path" \
    --input-fields-terminated-by '\001' \
    --input-lines-terminated-by '\n' \
    --input-string '\\N' \
    --input-non-string '\\N' \
    -m 1

    local exit_code=$?

    if (( exit_code == 0 ))
        then
            echo "${task_name}导出成功"
            return 0
        else
            echo "${task_name}导出失败"
            return 1
    fi
}

-- 执行sqoop导出
task_export=(
    "CUSTOMER_RISK_OVERVIEW:/user/hive/warehouse/ads.db/customer_risk_overview_tmp_table:客户风险概览"
    "TRANSACTION_RISK_REPORT:/user/hive/warehouse/ads.db/transaction_risk_report_tmp_table:交易风险报告"
    "COMPLIANCE_MONTHLY_REPORT:/user/hive/warehouse/ads.db/compliance_monthly_report_tmp_table:监管合规报告"
    "ALERT_RULE_PERFORMANCE:/user/hive/warehouse/ads.db/alert_rule_performance_tmp_table:预警规则效能分析")
for i in "${task_export[@]}";do
    -- 进行:分割$task值，分别赋值给table_name hdfs_name task_name
    IFS=':' reade -r table_name hdfs_name task_name <<< "$task"
    execute_sqoop_export "$table_name" "$hdfs_name" "$task_name" || exit 1
done

echo "所有数据导出完成"





